#include<stdio.h>
#include<unistd.h>
#include <sys/wait.h>
#include<stdlib.h>
//int main()
//{
//  pid_t id =fork();
//  if(id==0)
//  {
//    pid_t id2=fork();
//    
//    if(id2==0)
//    {
//      printf("我是孙子进程我的pid %d,父进程是 %d \n",getpid(),getppid());  
//      
//      exit(1);
//    }
//    
//    wait(NULL);
//    printf("我是父进程我的pid %d ,爷爷进程是 %d \n" ,getpid(),getppid());
//
//    exit(1);
//  }
//  
//  wait(NULL);
//
//  printf("我是爷爷进程PID：%d \n",getpid());
//  exit(1);
//
// return 0;
//}

void runson()
{
 int t=5;
 while(t--)
 {
 sleep(1);
 printf("我是子进程 PID: %d ,父进程的PID %d   t=%d\n",getpid(),getppid(),t);
 }

 int *p=NULL;
 *p=200;
 }

int main()
{
 
 pid_t id=fork();
 
 if(id==0)
 {
   runson();
   exit(123);
 }
 
 sleep(7);//子进程会在这里变为2秒僵尸

 printf("我是父进程，有点阻塞了\n");
 
 int status =0;//
 pid_t ret=waitpid(id,&status,0);
 
 if(ret>0)
 {
 if(WIFEXITED(status))
  printf("子进程退出无异常,退出信号是%d \n",WEXITSTATUS(status));
 else 
 printf("子进程退出异长 ");

  printf("等待到子进程，退出码是 %d ,退出信号是 %d \n",(status>>8)&0xFF,status&0x7F);
}

 else
 {
 printf("子进程退出失败了\n");
 }
 
 return 0;
 }





